/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.kuncipenyusunananggaran;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.sadhar.sia.common.ClassSession;
import org.sadhar.sia.framework.ClassApplicationModule;

import org.sadhar.sipp.perekamankodeglunitkerja.PerekamanKodeGLUnitKerja;
import org.sadhar.sipp.perekamankodeglunitkerja.PerekamanKodeGLUnitKerjaDAO;
import org.sadhar.sipp.perekamankodeglunitkerja.PerekamanKodeGLUnitKerjaDAOImpl;
import org.sadhar.sipp.perekamanpospendapatanunit.PerekamanPosPendapatanUnitDAO;
import org.sadhar.sipp.perekamanpospendapatanunit.PerekamanPosPendapatanUnitImpl;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Session;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Label;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Radiogroup;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Tree;
import org.zkoss.zul.Treechildren;
import org.zkoss.zul.Treeitem;
import org.zkoss.zul.Window;

/**
 * Digunakan untuk menangani komponen kuncipenyusunananggaran.KunciPenyusunanAnggaran.zul
 * @author Daud_HS
 * --revised Dewi(BAPSI)
 */
public class KunciPenyusunanAnggaranWnd extends ClassApplicationModule {

    private Listbox lstboxKunciPenyusunanAnggaran;
    private Button btnBatal;
    private Button btnSimpan;
    private Button btnSalin;
    private KunciPenyusunanAnggaranDAO kunciPenyusunanAnggaranDAO;
    private PerekamanPosPendapatanUnitDAO posPendapatanUnitDAO;
    private PerekamanKodeGLUnitKerjaDAO unitKerjaDAO;
    private Label lblTahunAnggaran;
    private Tree treeUnitKerja;
    private Combobox cmbJenis;
    private Radiogroup rdgrpStatus;
    private Radiogroup rdgrpKunci;
    private Radio rdAwal;
    private Radio rdRevisi;
    private Radio rdKunci;
    private Radio rdTdkKunci;
    private Textbox tempCmb;
    private Textbox txtUnitKerja;
    private Textbox txtKdUnitKerja;
    private int unitKerja = 0;
    private int jenisBiaya = 0;
    private int kunci = 0;
    private ClassSession session;
    private Session sesi;

    public KunciPenyusunanAnggaranWnd() {
        sesi = Sessions.getCurrent();
        session = (ClassSession) sesi.getAttribute("CURRENT_SESSION");
        kunciPenyusunanAnggaranDAO = new KunciPenyusunanAnggaranDAOImpl();
        posPendapatanUnitDAO = new PerekamanPosPendapatanUnitImpl();
        unitKerjaDAO = new PerekamanKodeGLUnitKerjaDAOImpl();
    }

    public void onCreate() throws Exception {
       
        btnBatal = (Button) getFellow("btnBatal");
        btnSimpan = (Button) getFellow("btnSimpan");
        btnSalin = (Button) getFellow("btnSalin");
        lblTahunAnggaran = (Label) getFellow("lblTahunAnggaran");
        lstboxKunciPenyusunanAnggaran = (Listbox) getFellow("lstboxKunciPenyusunanAnggaran");
        treeUnitKerja = (Tree) getFellow("treeUnitKerja");
        cmbJenis = (Combobox) getFellow("cmbJenis");
        rdgrpStatus = (Radiogroup) getFellow("rdgrpStatus");
        rdgrpKunci = (Radiogroup) getFellow("rdgrpKunci");
        rdAwal = (Radio) getFellow("rdAwal");
        rdRevisi = (Radio) getFellow("rdRevisi");
        rdKunci = (Radio) getFellow("rdKunci");
        rdTdkKunci = (Radio) getFellow("rdTdkKunci");
        tempCmb = (Textbox) getFellow("tempCmb");
        txtUnitKerja = (Textbox) getFellow("txtUnitKerja");
        txtKdUnitKerja = (Textbox) getFellow("txtKdUnitKerja");
        lblTahunAnggaran.setValue(session.getThnAnggaran());
        loadTreeUnKerjaTop();
        loadCmbJenis();
        load();

    }

    public void clear() {
        txtUnitKerja.setValue("");
        cmbJenis.setValue("");
        rdAwal.setChecked(true);
        rdKunci.setChecked(true);
    }

    public void load() throws Exception {
        lstboxKunciPenyusunanAnggaran.getItems().clear();
        int no = 1;
        for (final Map kunciPenyusunanaAnggaran : kunciPenyusunanAnggaranDAO.list(session.getThnAnggaran())) {
            Listitem item = new Listitem();
            item.setValue(kunciPenyusunanaAnggaran);
            item.appendChild(new Listcell("" + no++));
            Listcell cellUnitKerja = new Listcell();
            Label lblUnitKerja = new Label();
            lblUnitKerja.setId("unitKerja" + unitKerja++);
            lblUnitKerja.setValue(kunciPenyusunanaAnggaran.get("Nama_unit_kerja").toString());
            cellUnitKerja.appendChild(lblUnitKerja);
            item.appendChild(cellUnitKerja);
            String statusRevisi = (String) kunciPenyusunanaAnggaran.get("isRevisi");
            String revisi = "";
            if (statusRevisi.equalsIgnoreCase("y")) {
                revisi = "revisi";
            } else {
                revisi = "awal";
            }
            Listcell cellJenisBiaya = new Listcell();
            Label lblJenisBiaya = new Label();
            lblJenisBiaya.setId("jenisBiaya" + jenisBiaya++);
            lblJenisBiaya.setValue(kunciPenyusunanaAnggaran.get("jenisBiaya").toString() + "-" + revisi);
            cellJenisBiaya.appendChild(lblJenisBiaya);
            item.appendChild(cellJenisBiaya);
            String statusKunci = (String) kunciPenyusunanaAnggaran.get("isDikunci");
            Toolbarbutton toolbarbtnUbah = new Toolbarbutton();
            if (statusKunci.equalsIgnoreCase("y")) {
                toolbarbtnUbah.setLabel("[dikunci]");
            } else {
                toolbarbtnUbah.setLabel("[tidak dikunci]");
            }
            toolbarbtnUbah.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    final Window win = (Window) Executions.createComponents("sippzul/kuncipenyusunananggaran/EditKunciPenyusunanAnggaran.zul", getRoot(), null);
                    Label lblStatusKunciSekarang = (Label) win.getFellow("lblStatusKunciSekarang");
                    Label lblTahunAnggaran = (Label) win.getFellow("lblTahunAnggaran");
                    lblTahunAnggaran.setValue(kunciPenyusunanaAnggaran.get("tahunAnggaran").toString());
                    Textbox txtboxKodeUnitKerja = (Textbox) win.getFellow("txtboxKodeUnitKerja");
                    txtboxKodeUnitKerja.setValue(kunciPenyusunanaAnggaran.get("kodeUnit").toString());
                    Label lblUnitKerja = (Label) win.getFellow("lblUnitKerja");
                    lblUnitKerja.setValue(kunciPenyusunanaAnggaran.get("Nama_unit_kerja").toString());
                    String statusRevisi1 = (String) kunciPenyusunanaAnggaran.get("isRevisi");
                    String revisi1 = "";
                    if (statusRevisi1.equalsIgnoreCase("y")) {
                        revisi1 = "revisi";
                    } else {
                        revisi1 = "awal";
                    }
                    Label lblJenisAnggaran = (Label) win.getFellow("lblJenisAnggaran");
                    lblJenisAnggaran.setValue(kunciPenyusunanaAnggaran.get("jenisBiaya").toString() + "-" + revisi1);
                    Textbox txtboxIdJenisAnggaran = (Textbox) win.getFellow("txtboxIdJenisAnggaran");
                    txtboxIdJenisAnggaran.setValue(kunciPenyusunanaAnggaran.get("kodeJenisAnggaran").toString());

                    Radio rdbtnDikunci = (Radio) win.getFellow("rdbtnDikunci");
                    Radio rdbtnTidakDikunci = (Radio) win.getFellow("rdbtnTidakDikunci");
                    if (kunciPenyusunanaAnggaran.get("isDikunci").toString().equalsIgnoreCase("Y")) {
                        lblStatusKunciSekarang.setValue("dikunci");
                        rdbtnDikunci.setChecked(true);
                    } else {
                        lblStatusKunciSekarang.setValue("tidak dikunci");
                        rdbtnTidakDikunci.setChecked(true);
                    }
                    win.setPosition("center");
                    win.doModal();
                }
            });
            Listcell listcell = new Listcell();
            listcell.appendChild(toolbarbtnUbah);
            item.appendChild(listcell);
            lstboxKunciPenyusunanAnggaran.appendChild(item);
        }
    }

    public void loadData() throws Exception {
        load();
    }

    public void loadCmbJenis() throws Exception {
        try {
            List lsJenis = kunciPenyusunanAnggaranDAO.listJenisAnggaran();
            cmbJenis.getItems().clear();
            for (Iterator it = lsJenis.iterator(); it.hasNext();) {
                KunciPenyusunanAnggaran x = (KunciPenyusunanAnggaran) it.next();
                Comboitem item = new Comboitem();
                item.setValue(x.getKdJenisAnggaran());
                item.setLabel(x.getNmJenisAnggaran());
                cmbJenis.appendChild(item);
            }
        } catch (Exception e) {
            Messagebox.show("" + e.getMessage());
        }
    }

    public void onChangeCmbJenis() {
        List lsJenis = kunciPenyusunanAnggaranDAO.listJenisAnggaran();
        KunciPenyusunanAnggaran data = (KunciPenyusunanAnggaran) lsJenis.get(cmbJenis.getSelectedIndex());
        this.tempCmb.setValue(data.getKdJenisAnggaran());
    }

    public void loadTreeUnKerjaTop() throws Exception {
        treeUnitKerja.removeChild(treeUnitKerja.getFirstChild());
        treeUnitKerja.clear();
        Treechildren child = new Treechildren();
        Map map = new HashMap();
        map.put(0, child);
        int tmpIdInduk = 0;
        for (PerekamanKodeGLUnitKerja unit : unitKerjaDAO.list()) {
            Treeitem item = new Treeitem();
            item.setId(String.valueOf(unit.getIdUnitKerja()));
            item.setValue(unit);
            item.setLabel(unit.getNama_unit_kerja());
            Component comp = (Component) map.get(unit.getIdIndukUnitKerja());
            if (tmpIdInduk == unit.getIdIndukUnitKerja()) {
                item.setParent(comp);
                map.put(unit.getIdUnitKerja(), item);
            } else {
                Treechildren grandChild = new Treechildren();
                grandChild.appendChild(item);
                grandChild.setParent(comp);
                map.put(unit.getIdUnitKerja(), item);
                map.put(unit.getIdIndukUnitKerja(), grandChild);
                tmpIdInduk = unit.getIdIndukUnitKerja();
            }
        }
        treeUnitKerja.appendChild((Component) map.get(0));
    }

    public void treeUnitKerjaOnSelect() throws Exception {
        PerekamanKodeGLUnitKerja unit = (PerekamanKodeGLUnitKerja) treeUnitKerja.getSelectedItem().getValue();
        txtUnitKerja.setValue(unit.getNama_unit_kerja());
        txtKdUnitKerja.setValue(unit.getKd_unit_kerja());

    }

    /**
     * Digunakan untuk menangani event btnSimpanOnClick()
     * @throws Exception
     */
    public void btnSimpanOnClick() throws Exception {
        String unit = txtUnitKerja.getValue();
        if (unit.compareTo("") != 0) {
            if (cmbJenis.getSelectedIndex() != -1) {
                String revisi = "N";
                String kuncinya = "Y";
                if (rdAwal.isChecked() == true) {
                    revisi = "N";
                } else if (rdRevisi.isChecked() == true) {
                    revisi = "Y";
                }
                if (rdKunci.isChecked() == true) {
                    kuncinya = "Y";
                } else if (rdTdkKunci.isChecked() == true) {
                    kuncinya = "N";
                }
                KunciPenyusunanAnggaran data = new KunciPenyusunanAnggaran();
                data.setTahunAnggaran(lblTahunAnggaran.getValue());
                data.setKodeUnit(txtKdUnitKerja.getValue());
                data.setKdJenisAnggaran(tempCmb.getValue());
                data.setIsRevisi(revisi);
                data.setIsDikunci(kuncinya);
                String cek = kunciPenyusunanAnggaranDAO.cekKunciAnggaran(data);
                if (cek.compareTo("") == 0) {
                    kunciPenyusunanAnggaranDAO.insert(data);
                    Messagebox.show("Data berhasil disimpan");
                    clear();
                    loadData();
                } else {
                    kunciPenyusunanAnggaranDAO.update(data);
                    Messagebox.show("Data berhasil dibaharui");
                    clear();
                    loadData();
                }
            } else {
                Messagebox.show("Pilih Jenis Anggaran");
            }
        } else {
            Messagebox.show("Masukkan pilihan unit kerja");
        }
    }

    /**
     * Digunakan untuk menangani even btnBatalOnClick()
     * @throws Exception
     */
    public void btnBatalOnClick() throws Exception {
        loadTreeUnKerjaTop();
        clear();
    }

    /**
     * Digunakan untuk menangani event btnSalinOnClick()
     * @throws InterruptedException
     * @throws Exception
     */
    public void btnSalinOnClick() throws InterruptedException, Exception {
        final Window win = (Window) Executions.createComponents("sippzul/kuncipenyusunananggaran/KunciPenyusunanAnggaranSalin.zul", this, null);
        win.doModal();
        loadData();
    }
}
